"""
lambda表达式创建匿名函数
函数中的参数在lambda表达式中都适用

lambda参数列表：表达式（返回值）
但返回值只能是一个
主题没有函数中的代码块那么复杂，仅仅是一个表达式（只包含一个语句）
"""

def fun1(a,b):
    return a+b

print(fun1(1,2))

fun2=lambda a,b:a+b
print(fun2(2,2))


#lambda 只能有一个返回值，如果要返回多个元素可以用元组
#fun3=a,b:a,b
fun3=lambda a,b:(a,b)
print(fun3(1,1))

#默认值
sum2=lambda a,b,c=100:a+b+c
print(sum2(20,30))
print(sum2(20,30,200))

#可变参数  加一个*返回元组
fn1=lambda *args:args
print(fn1(2,3,5))

#可变参数  加两个*返回字典

fn2=lambda **args:args
print(fn2(name='tom',age=18))

"""
1）使用lambda表达式判断两个数的最大值
"""

max=lambda a,b:a if a>b else b
print(max(1,2))


"""
2）列表数据按字典key的值排序。分别按name升序排列，按age降序排列列表
"""

students=[
    {'name':'tom','age':20},
    {'name':'a','age':18},
    {'name':'r','age':19}
]
#reverse默认是Flase
# students.sort(key=lambda x:x['name'])
# print(students)
#
# students.sort(key=lambda x:x['age'],reverse=True)
# print(students)

#sorted(),类似于列表的sort(),他不会改变原列表
# print(sorted(students,key=lambda x:x['age'],reverse=True))
# print(students)

dict1={'a':1,'b':2,'c':3,'d':4,'e':3,'f':1,'g':7}


#按value降序排序

print(sorted(dict1.items(),key=lambda item:item[1],reverse=True))

#先按value排，value一样的话按key排

print(sorted(dict1.items(),key=lambda item:(item[1],item[0]),reverse=True))






